home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / util / pack / xpk_Source.lha / xpk_Source / xpkmaster / Test / testMemPack.c < prev    next >
C/C++ Source or Header  |  1996-12-06  |  3KB  |  126 lines

  1. #define NAME     "testMemPack"
  2. #define REVISION "1"
  3. #define ENDCODE_NOCTRLC
  4.  
  5. /* Programmheader
  6.  
  7.     Name:        testMemPack
  8.     Author:        SDI
  9.     Distribution:    PD
  10.     Description:    tests Xpk Pack function
  11.     Compileropts:    -
  12.     Linkeropts:    -l xpkmaster amiga
  13.  
  14.  1.1   06.12.96 : fixed for new includes, added new WriteXpkFib
  15. */
  16.  
  17. #include <pragma/exec_lib.h>
  18. #include <pragma/dos_lib.h>
  19. #include <pragma/xpkmaster_lib.h>
  20. #include <exec/memory.h>
  21. #include "WriteXpkFib.c"
  22. #include "SDI_defines.h"
  23.  
  24. #ifdef __MAXON__
  25.   #define __asm
  26.   #define __saveds
  27. #endif
  28.  
  29. struct Library        *XpkBase        = 0;
  30. ULONG            DosVersion        = 37;
  31. STRPTR            ibuf            = 0,
  32.             obuf            = 0;
  33. ULONG            ibuflen            = 0,
  34.             obuflen            = 0;
  35. BPTR            fh            = 0;
  36. struct RDArgs        *rda            = 0;
  37. struct FileInfoBlock    *fib            = 0;
  38. struct XpkFib        *xfib            = 0;
  39.  
  40. #define PARAM "FROM/A,METHOD/A,TO/A"
  41.  
  42. LONG __asm __saveds chunkfunc(register __a1 struct XpkProgress *prog)
  43. {
  44.   switch(prog->xp_Type)
  45.   {
  46.   case XPKPROG_START: PutStr("Start: "); break;
  47.   case XPKPROG_MID: PutStr("\rMid  : "); break;
  48.   case XPKPROG_END: PutStr("\rEnd  : "); break;
  49.   }
  50.  
  51.   if(prog->xp_Type != XPKPROG_END)
  52.     Printf("%4s: %-8s (%3ld%% done, %2ld%% CF, %6ld cps) %s",
  53.       prog->xp_PackerName, prog->xp_Activity, prog->xp_Done,
  54.       prog->xp_CF, prog->xp_Speed, prog->xp_FileName);
  55.   else
  56.     Printf("%4s: %-8s (%3ldK, %2ld%% CF, %6ld cps) %s\033[K\n",
  57.       prog->xp_PackerName, prog->xp_Activity, prog->xp_ULen >> 10,
  58.       prog->xp_CF, prog->xp_Speed, prog->xp_FileName);
  59.  
  60.   Flush(Output());
  61.   return (LONG) SetSignal(0, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C;
  62. }
  63.  
  64. struct Hook chunkhook = { {0}, (ULONG (*)()) chunkfunc};
  65.  
  66. void main(void)
  67. {
  68.   UBYTE errbuf[XPKERRMSGSIZE+1];
  69.   ULONG olen;
  70.   struct {
  71.     STRPTR from;
  72.     STRPTR method;
  73.     STRPTR to;
  74.   } args = {0,0,0};
  75.  
  76.   if(!(rda = ReadArgs(PARAM, (LONG *) &args, 0)) ||
  77.   !(xfib = (struct XpkFib *) AllocMem(sizeof(struct XpkFib), MEMF_ANY|MEMF_CLEAR)) ||
  78.   !(XpkBase = OpenLibrary(XPKNAME, 0)) ||
  79.   !(fh = Open(args.from, MODE_OLDFILE)) ||
  80.   !(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
  81.   !(ExamineFH(fh, fib)) ||
  82.   !(ibuf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
  83.   Read(fh, ibuf, fib->fib_Size) != fib->fib_Size)
  84.     End(RETURN_FAIL);
  85.  
  86.   ibuflen = fib->fib_Size;
  87.   Close(fh); fh = 0;
  88.  
  89.   if(XpkExamineTags(xfib, XPK_InBuf, ibuf, XPK_InLen, ibuflen,
  90.     XPK_GetError, errbuf, TAG_DONE))
  91.   {
  92.     STRPTR a = errbuf;
  93.     VPrintf("Can't XpkExamine: %s\n", &a);
  94.     End(RETURN_FAIL);
  95.   }
  96.  
  97.   if(XpkPackTags(XPK_InBuf, ibuf, XPK_InLen, ibuflen,
  98.     XPK_PackMethod, args.method, XPK_GetOutBuf, &obuf,
  99.     XPK_GetOutBufLen, &obuflen, XPK_GetOutLen, &olen,
  100.     XPK_GetError, errbuf, XPK_ChunkHook, &chunkhook, TAG_DONE))
  101.   {
  102.     STRPTR a = errbuf;
  103.     VPrintf("Can't XpkPack: %s\n", &a);
  104.     End(RETURN_FAIL);
  105.   }
  106.  
  107.   if(!(fh = Open(args.to, MODE_NEWFILE)) ||
  108.   Write(fh, obuf, olen) != olen)
  109.     End(RETURN_FAIL);
  110.  
  111.   End(RETURN_OK);
  112. }
  113.  
  114.  
  115. void end(void)
  116. {
  117.   if(fh)    Close(fh);
  118.   if(xfib)    FreeMem(xfib, sizeof(struct XpkFib));
  119.   if(XpkBase)    CloseLibrary(XpkBase);
  120.   if(fib)    FreeDosObject(DOS_FIB, fib);
  121.   if(rda)    FreeArgs(rda);
  122.   if(ibuf)    FreeMem(ibuf, ibuflen);
  123.   if(obuf)    FreeMem(obuf, obuflen);
  124. }
  125.  
  126.